
define(function(require, exports, module) {
	"require:nomunge,exports:nomunge,module:nomunge";

	
$.fn.ddf_pagination = function(pageSize,pageNumber, totalCount, totalPage, opts) {
	
	pageSize=pageSize;
	
	opts = $.extend({
		changePageCallback : function() {
		},
		changePageSizeCallBack : function() {
		}
	}, opts || {});

	return this
			.each(function() {
				
				/**
				 * 分页跳转
				 */
				function onChangePage(pageNumber) {
					
					return function() {
						opts.changePageCallback(pageSize,pageNumber);
					}
				}
				/**
				 * 设置每页显示条数
				 */
				function onChangePageSize(pageSize) {
					
					return function() {
						
						opts.changePageSizeCallBack(pageSize);
						
					}
					
				}
				/**
				 * 是否是首页（第一页），第一页页码为1
				 */
				function isFirstPage() {
					return pageNumber == 1;
				}

				/**
				 * 是否是最后一页
				 */
				function isLastPage() {
					return pageNumber >= totalPage;
				}
				
				/**
				 * 是否有下一页
				 */
				function isHasNextPage() {
					return totalPage > pageNumber;
				}
				
				/**
				 * 是否有上一页
				 */
				function isHasPreviousPage() {
					return pageNumber > 1;
				}

				/**
				 * 初始化分页界面
				 */
				function initPage() {
					

					current=pageNumber;
					
					var htmlStr="",middleStr="";
					
					var count=0;
					
					var max=0;
					
					
					htmlStr += '<div class=" ui-toolbar ui-widget-header ">';
					htmlStr += '<div class="span4 page_num">共&nbsp;<code>'
							+ totalCount
							+ '</code>&nbsp;&nbsp;条,'
//							+ '当前第&nbsp;<code>'+ pageNumber + '</code>&nbsp;页,'
							+ '&nbsp;共<code>'
							+ totalPage + '</code>&nbsp;页&nbsp;&nbsp;每页&nbsp;&nbsp;<div class="btn-group"><button data-toggle="dropdown" class="btn btn-mini dropdown-toggle"><span id="showPageSize'+id+'">'+pageSize+'</span>&nbsp;&nbsp;<span class="caret"></span></button><ul class="dropdown-menu" id="pageSize'+id+'"><li><a>10</a></li><li><a>50</a></li><li><a>100</a></li><li><a>200</a></li><li><a>500</a></li></ul></div>&nbsp;&nbsp;条';
					htmlStr += '</div>';

					htmlStr += '<div class="pagination alternate dataTables_paginate">';

					htmlStr += '<ul id="ul'+id+'">';
					htmlStr += '<li><button id="firstBtn'+id+'" type="button">首页</button></li>';
					htmlStr += ' <li><button id="previousBtn'+id+'" type="button">上一页</button></li> ';
					
					//如果总页数小于showPageNum,则显示出来的数和返回的页数是一样的,例如总页数是2  ,第一页显示 ===首页 第一页1,2 下一页 尾页
					//如果总页数大于showPageNum,则显示出来的数和showPageNum是一样的,例如总页数是5  ,第一页显示 ===首页 第一页1,2,3,4 下一页 尾页
					for(var i=0;i<totalPage;i++){
						
						if(totalPage>showPageNum){
							
							if(pageNumber+i<=totalPage && count<=showPageNum){
								
								count++;
								
								max=pageNumber+i;
							}
							
						}else{
							
							
							htmlStr+=' <li><button type="button">'+(i+1)+'</button></li>';
							
						}
					
						
					}
					
					var values=current-first;
					
					//如果小于0,则表示在按上一页
					if(values<0){
						
						values=-values;
						
						firstFlag=true;
					}
					
					//默认第一次进来,之后的就判断这个值，如果大于showPageNum/2，则分页的数字就改变，例如原先是 1,2,3,4,5,6  会变成 4,5,6,7,8,9
					if(firstFlag || values>parseInt(showPageNum/2)){

						firstFlag=false;
						
						first=pageNumber;
						
						if(pageNumber<=totalPage-showPageNum){
							
							for(var i=pageNumber;i<=max;i++){
								
								
									middleStr+=' <li><button type="button">'+i+'</button></li>';
									
									_middleStr=middleStr;
							
						
							}	
							
							
						}else{
							
								//点击最后几页的时候
								for(var i=0;i<=showPageNum;i++){
									
									if(totalPage>showPageNum){
										
										middleStr+=' <li><button type="button">'+(totalPage-(showPageNum-i))+'</button></li>';
									
									}
									_middleStr=middleStr;
							
								}	
						
						
							
						}
					}
					
					htmlStr+=_middleStr;
					
					htmlStr += ' <li><button id="nextBtn'+id+'" type="button">下一页</button></li>';
					htmlStr += ' <li><button id="lastBtn'+id+'" type="button">尾页</button></li>';
					htmlStr += '</ul>';
					htmlStr += '</div>';
					htmlStr += '</div>';

					panel.empty();
					
					panel.append(htmlStr);

					
					for(var i=0;i<$("#ul"+id+" li").length;i++){
						
						if($("#ul"+id+" li:eq("+i+") button").text()==pageNumber){
							
							$("#ul"+id+" li:eq("+i+") button").attr("disabled","disabled").siblings().attr("disabled",true)
							
							$("#ul"+id+" li:eq("+i+") button").addClass("active").siblings().removeClass("active");
							
						}
						
					}
					
					if (isFirstPage()) {
						$("#firstBtn"+id).attr("disabled", "disabled");
					} else {
						$("#firstBtn"+id).attr("disabled", false);
					}
					if (isLastPage()) {

						$("#lastBtn"+id).attr("disabled", "disabled");

					} else {
						$("#lastBtn"+id).attr("disabled", false);

					}

					if (!isHasNextPage()) {

						$("#nextBtn"+id).attr("disabled", "disabled");

					} else {

						$("#nextBtn"+id).attr("disabled", false);
					}

					if (!isHasPreviousPage()) {

						$("#previousBtn"+id).attr("disabled", "disabled");

					} else {

						$("#previousBtn"+id).attr("disabled", false);
					}

					//事件绑定
					$('#firstBtn'+id).on('click', onChangePage(1));
					$('#previousBtn'+id).on('click', onChangePage(pageNumber - 1));
					$('#nextBtn'+id).on('click', onChangePage(pageNumber + 1));
					$('#lastBtn'+id).on('click', onChangePage(totalPage));
					for(var i=2;i<$("#ul"+id+" li").length-2;i++){
						
						$("#ul"+id+" li:eq("+i+")").on('click',onChangePage($("#ul"+id+" li:eq("+i+") button").text()));
					}
					for(var i=0;i<$("#pageSize"+id+" li a").length;i++){
						
						$("#pageSize"+id+" li:eq("+i+") a").on('click',onChangePageSize($("#pageSize"+id+" li:eq("+i+") a").text()));
					}
					

				}

				var panel = $(this);
				var id="_"+panel.attr("id");
				var _middleStr="",showPageNum=5,first=1,current=1,firstFlag=true;

				initPage();

			});
}



});